package it.mp.acquaalta.utility;

import it.mp.acquaalta.widget.R;

import java.io.Serializable;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Calendar;

import android.content.Context;
import android.content.SharedPreferences;

public class AcquaAltaBean implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 142952641486562639L;

	private static final String SR_OPTIONS = "MeteoLiveSharedOptions";

	private final static String AA_DATA = "AA_DATA_";
	private final static String AA_DATA_TIPO = "AA_DATA_TIPO_";
	private final static String AA_DATA_VALORE = "AA_DATA_VALORE_";
	private final static String AA_DATA_AGGIORNAMENTO = "AA_DATA_AGGIORNAMENTO";

	public ArrayList<AcquaAltaBean.Bean> alBean;
	public String dataUltimoAggiornamento;

	public class Bean implements Serializable {
		/**
		 * 
		 */
		private static final long serialVersionUID = -4232288656912985483L;
		public String data;
		public String tipo;
		public String valore;
		public Bean(String data, String tipo, String valore) {
			this.data = data;
			this.tipo = tipo;
			this.valore = valore;
		}
		public boolean isValorizzato() {
			if ("nd".equals(data)) {
				return false;
			}
			return true;
		}
		public String getData() {
			if (isValorizzato()) {
				return data.substring(0, 5);
			} else {
				return "nd";
			}
		}
		public String getDataWidget() {
			if (isValorizzato()) {
				return data.substring(0, 5).replace("/", "|");
			} else {
				return "nd";
			}
		}
		public String getGiorno() {
			if (isValorizzato()) {
				return data.substring(0, 2);
			} else {
				return "nd";
			}
		}
		public String getMese() {
			if (isValorizzato()) {
				return data.substring(3, 5);
			} else {
				return "nd";
			}
		}
		public String getAnno() {
			if (isValorizzato()) {
				return data.substring(6, 10);
			} else {
				return "nd";
			}
		}
		public String getOra() {
			if (isValorizzato()) {
				return data.substring(11, 13);
			} else {
				return "nd";
			}
		}
		public String getMinuti() {
			if (isValorizzato()) {
				return data.substring(14, 16);
			} else {
				return "nd";
			}
		}

		public String getOrario() {
			if (isValorizzato()) {
				return data.substring(11, data.length());
			} else {
				return "nd";
			}
		}
		public int getColore() {
			if (isValorizzato()) {
				int valoreN = Integer.valueOf(this.valore);
				if (valoreN >= 140) {
					return R.color.RED;
				} else if ((valoreN >= 110) && (valoreN <= 139)) {
					return R.color.ARANCIONE;
				} else if ((valoreN >= 80) && (valoreN <= 109)) {
					return R.color.GIALLO;
				} else if ((valoreN >= -50) && (valoreN <= 79)) {
					return R.color.VERDE;
				} else if ((valoreN >= -90) && (valoreN <= -51)) {
					return R.color.WHITE;
				} else if (valoreN < -90) {
					return R.color.AZZURRO;
				} else {
					return -1;
				}

			} else {
				return -1;

			}
		}
		private int getNumeroColore() {
			if (isValorizzato()) {
				int valoreN = Integer.valueOf(this.valore);
				if (valoreN >= 140) {
					return 1;// R.color.RED;
				} else if ((valoreN >= 110) && (valoreN <= 139)) {
					return 2;// R.color.ARANCIONE;
				} else if ((valoreN >= 80) && (valoreN <= 109)) {
					return 3;// R.color.GIALLO;
				} else if ((valoreN >= -50) && (valoreN <= 79)) {
					return 4;// R.color.VERDE;
				} else if ((valoreN >= -90) && (valoreN <= -51)) {
					return 5;// R.color.WHITE;
				} else if (valoreN < -90) {
					return 6;// R.color.AZZURRO;
				} else {
					return 0;
				}

			} else {
				return 0;

			}
		}
		public int getQuadratino() {
			if (isValorizzato()) {
				int valoreN = Integer.valueOf(this.valore);
				if (valoreN >= 140) {
					return R.drawable.rosso;
				} else if ((valoreN >= 110) && (valoreN <= 139)) {
					return R.drawable.arancione;
				} else if ((valoreN >= 80) && (valoreN <= 109)) {
					return R.drawable.giallo;
				} else if ((valoreN >= -50) && (valoreN <= 79)) {
					return R.drawable.verde;
				} else if ((valoreN >= -90) && (valoreN <= -51)) {
					return R.drawable.bianco;
				} else if (valoreN < -90) {
					return R.drawable.azzurro;
				} else {
					return R.drawable.nullo;
				}
			} else {
				return R.drawable.nullo;
			}
		}

		public int getID() {
			Calendar cal = Calendar.getInstance();
			cal.set(Calendar.YEAR, Integer.parseInt(this.getAnno()));
			cal.set(Calendar.MONTH, Integer.parseInt(this.getMese()) - 1);
			cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(this.getGiorno()));
			String separatore = cal.get(Calendar.DAY_OF_YEAR) < 10 ? "00" : cal.get(Calendar.DAY_OF_YEAR) < 100 ? "0" : "";
			return Integer.valueOf(this.getAnno() + separatore + cal.get(Calendar.DAY_OF_YEAR) + this.getNumeroColore());
		}

	}

	public static final AcquaAltaBean valueOf(Context context) {

		SharedPreferences prefs = context.getSharedPreferences(SR_OPTIONS, Context.MODE_PRIVATE);
		AcquaAltaBean aa = new AcquaAltaBean();

		aa.alBean = new ArrayList<Bean>();
		for (int i = 0; i < 12; i++) {
			aa.alBean.add(aa.new Bean(prefs.getString(AA_DATA + i, "nd"), prefs.getString(AA_DATA_TIPO + i, "nd"), prefs.getString(AA_DATA_VALORE + i, "nd")));
		}

		aa.dataUltimoAggiornamento = prefs.getString(AA_DATA_AGGIORNAMENTO, "nd");
		return aa;
	}

	public void toSharedPreferences(Context context) {

		SharedPreferences prefs = context.getSharedPreferences(SR_OPTIONS, Context.MODE_PRIVATE);
		SharedPreferences.Editor editor = prefs.edit();
		for (int i = 0; i < alBean.size(); i++) {
			editor.putString(AA_DATA + i, alBean.get(i).data);
			editor.putString(AA_DATA_TIPO + i, alBean.get(i).tipo);
			editor.putString(AA_DATA_VALORE + i, alBean.get(i).valore);
		}
		for (int i = alBean.size(); i < 12; i++) {
			editor.putString(AA_DATA + i, "nd");
			editor.putString(AA_DATA_TIPO + i, "nd");
			editor.putString(AA_DATA_VALORE + i, "nd");
		}

		Calendar cal = Calendar.getInstance();
		StringWriter sb = new StringWriter();
		if (cal.get(Calendar.HOUR_OF_DAY) < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf(cal.get(Calendar.HOUR_OF_DAY)));

		sb.append(":");
		if (cal.get(Calendar.MINUTE) < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf(cal.get(Calendar.MINUTE)));

		sb.append(" ");
		if (cal.get(Calendar.DAY_OF_MONTH) < 10) {
			sb.append("0");
		}

		sb.append(String.valueOf(cal.get(Calendar.DAY_OF_MONTH)));
		sb.append("/");
		if ((cal.get(Calendar.MONTH) + 1) < 10) {
			sb.append("0");
		}
		sb.append(String.valueOf((cal.get(Calendar.MONTH) + 1)));

		editor.putString(AA_DATA_AGGIORNAMENTO, sb.toString());
		editor.commit();
	}
}
